/**
 * @param {number} n
 * @return {number}
 */
 var numSquares = function(n) {
  // 
  let dp = new Array(n+1).fill(Infinity)
  dp[0] = 0
  for(let i = 0;i <= n;i++){
      for(let j = 1;j * j <= i;j++){
          // 如果j*j 大于 i 说明i -j*j 是小于0 的下面会报错
          // 这个时候就只有完全平方数
          dp[i] = Math.min(dp[i-j*j]+1,dp[i])
          // 这样的从前到后就肯定会是让他都是完全平方数组成的了
      }
  }
  return dp[n]
};